package com.forumdemo.forum.controller;

import com.forumdemo.forum.common.AppResult;
import com.forumdemo.forum.exception.ApplicationException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ws
 * Date: 2023-10-18
 * Time: 15:40
 */

/**
 * springfox 的注解
 * @Api:作用在Controller上，对控制器类的说明 tags="说明该类的作用，可以在前台界面上看到的注解"
 * @ApiModel:作用在响应的类上,对返回响应数据的说明
 * @ApiModelProperty:作用在类的属性上，对属性的说明
 * @ApiOperation:作用在具体方法上,对API接口的说明
 * @ApiParam:作用在方法中的每一个参数上,对参数的属性进行说明
 */
@Api(tags = "测试类的相关接口") // @Api:作用在Controller上，对控制器类的说明 tags="说明该类的作用，可以在前台界面上看到的注解"
@RestController// 表示返回的的结果是数据
@RequestMapping("/test")// 定义一级映射路径
public class TestController {

    @ApiOperation("测试接口1，显示 hello，spring！") // @ApiOperation:作用在具体方法上,对API接口的说明
    @GetMapping("/hello")// 定义二级映射路径
    public String hello() {
        return "hello,spring!";
    }



    @ApiOperation("测试接口2，显示抛出的异常信息")
    @GetMapping("/exception")
    public AppResult testException() throws Exception {
        throw new Exception("这是一个 Exception...");
    }


    @ApiOperation("测试接口3，显示抛出的自定义异常信息")
    @GetMapping("/appException")
    public AppResult testApplicationException() {
        throw new ApplicationException("这是一个 ApplicationException...");
    }

    @ApiOperation("测试接口4，按传入的姓名显示你好信息")
    @PostMapping("/helloByName")
    public AppResult helloByName(@ApiParam("姓名") @RequestParam("name") String name) { // @ApiParam:作用在方法中的每一个参数上,对参数的属性进行说明
        // @RequestParam("name") springmvc 的注解，对于要提交的参数的方法需要加上，“url 中的名字”（后面的 string name 是 java 参数的名字）
        return AppResult.success("hello:" + name);
    }
}
